`*** DirPrint Version 2.0
`*** Written (W) 1993 Falk Rehwagen
`*** D-04103 Leipzig, Wintergartenstraße 2/107, Telefon (0341) 284343
`==========================================================================
`*** Definitionsteil für Compiler
NAME"DIR PRINT" ` Dateiname festlegen
CLASS"DirPrint V2.0" ` Dateiklasse festlegen
AUTHOR"Falk Rehwagen" ` Autorenname festlegen
STRLEN 100 ` Stringlänge für Operatoren
CODE $2800,$4200:CONST $4200,$5000 ` Speicherbereiche festlegen
`*** Deklarationsteil für Programmvariablen
BYTEVAR zähler,track,sektor,seitenzahl,p_seite,p_seiten ` Zwischenspeicher-Variablen
BYTEVAR papier,format,s_anfang,s_ende,diskflag,abbruch ` Dialogbox-Optionen
BYTEVAR ram_maske,rmaske_alt,startlfw ` Variablen für Druckersuche
BYTEVAR klickflag,wert ` Var's für Klick in Haupt-DB
BYTEVAR länge,reihen,druckseiten,reihenzahl ` Variablen für Papieraufteilung
STRVAR 20; seitentext ` Text für Seitenkennzeichen
ROW 640 BYTEVAR puffer ` Puffer für Grafikzeile
ROW 5 BYTEVAR datum2 ` Datum zwischenspeichern
STRVAR 2; string ` zur Seiteneingabe, Haupt-DB
BYTEVAR AT $84b3; selection ` enthält Icon-Blinkgeschw.
INTVAR AT $0400; xpos ` Cursor-Position
BYTEVAR icony,zeichen,icon ` Zwischenspeicher, Position
INTVAR iconx,zzähler,offset ` Zähler, Hilfsvariablen
ROW 1920 BYTEVAR druckpuffer ` Datenreihe für Druckertreiber
ROW 256 BYTEVAR AT $8000; diskpuffer ` Diskettenblock-Ablage
ROW 256 BYTEVAR AT $8100; diskpuffer2 ` zweiter Diskblock-Ablage
LABEL recover,disk_lesen,set_papier,set_seiten,klick,set_format,main ` Unterroutinen anmelden
LABEL drucken,drucken2,reihe_drucken,reihe_zeigen,icon_zeigen,neue_seite ` weitere Unterroutinen
LABEL tasten ` weitere Label
OBJFILE"DIR PRINT_obj" ` "DIR PRINT_obj"=Objektdatei
OBJECT icn_drucken,icn_lfw,icn_disk,icn_verlassen,c64_icon ` 5 Bitmaps einbinden
OBJECT university6 ` Zeichensatz für Ausdruck
`*** Anweisungsteil des Programms
`*** Grundaufbau des Bildschirms
CLS ` Bildschirm löschen (grau)
PATTERN 0 ` Muster weiß
RECT 5,169,314,194 ` Infofeld-Rechteck zeichnen
FRAME 5,169,314,194 ` Infofeld einrahmen
SETPOS 50,179 ` Cursorposition setzen
PRINT"/BDirPrint Version 2.0/P - (W) 1993 Falk Rehwagen" ` Text ausgeben
SETPOS 27,190 ` neue Cursorposition
PRINT"D-04103 Leipzig, Wintergartenstraße 2//107, Tel.: (0341) 284343" ` Text ausgeben
`*** Einlesen des Druckertreibers
startlfw=curdrive ` Startlfw zwischenspeichern
ram_maske=128 ` Flag für RAM-Lfw testen
REPEAT ` äußere Schleife, Anfang
zähler=0 ` Lfw-Zähler auf 0 setzen
REPEAT ` innere Schleife, Anfang
IF(((PEEK $88c6)AND 128)==ram_maske)THEN ` Bedingung Druckersuche
PRINTINIT druckpuffer ` Drucker suchen
ELSE ` sonst
iostat=5 ` als nicht gefunden melden
ENDIF ` Bedingung, Ende
DRIVE ` auf nächstes Lfw schalten
INC zähler ` zähler=zähler+1
UNTIL((iostat==0)OR(zähler==numdrives)) ` innere Schleife, Ende
rmaske_alt=ram_maske ` Lfw-Flag zwischenspeichern
ram_maske=0 ` 2. Durchlauf, nicht-RAM-Lfw
UNTIL((rmaske_alt==0)OR(iostat==0)) ` äußere Schleife, Ende
SETVECTOR $84b1,recover ` neue Wiederherstellroutine
IF(iostat<>0)THEN ` wenn Druckertr. unauffindbar
ERROR ` Fehlerbox anzeigen
END ` DeskTop aufrufen
ENDIF ` Bedingungsende
DEVICE startlfw ` Startlaufwerk wieder setzen
`*** Auswahlbox des Programms
@main ` Einsprung main
PATTERN 1:RECT 48,20,287,156 ` Box-Schatten zeichnen
PATTERN 0:RECT 40,12,279,148:FRAME 40,12,279,148 ` Fenster+Rahmen zeichnen
SETPOS 56,27:PRINT"/BDrucke das Inhaltsverzeichnis von Disk" ` Text ausgeben
SETPOS 56,40:PRINT"in Lfw "; ` Text ausgeben
PUT(57+curdrive):PUT 58 ` Lfw und ":" ausgeben
SETPOS 69,56:PRINT"Von DeskTop-Arbeitsseite:" ` Text ausgeben
FRAME 210,47,240,61 ` Eingabefeld markieren
SETPOS 75,73:PRINT"Bis DeskTop-Arbeitsseite:" ` Text ausgeben
FRAME 210,64,240,78 ` Eingabefeld markieren
SETPOS 69,98:PRINT"Einzelblattpapier" ` Text ausgeben
FRAME 56,91,64,99 ` Optionenfeld markieren
SETPOS 69,114:PRINT"Endlospapier" ` Text ausgeben
FRAME 56,107,64,115 ` Optionenfeld markieren
SETPOS 173,98:PRINT"Einfaches Format" ` Text ausgeben
FRAME 160,91,168,99 ` Optionenfeld markieren
SETPOS 173,114:PRINT"Erweitertes Format/P" ` Text ausgeben
FRAME 160,107,168,115 ` Optionenfeld markieren
GOSUB disk_lesen ` Arbeitsblatt-Anzahl einlesen
IF(diskflag==0)THEN ` wenn Disk eingelegt
BITMAP 6,125,icn_drucken ` dann drucken-Icon anzeigen
ENDIF ` Bedingungsende
IF(numdrives>1)THEN ` wenn mehrere Laufwerke
BITMAP 13,125,icn_lfw ` dann Lfw-Icon anzeigen
ENDIF ` Bedingungsende
IF(((PEEK $88c6)AND 128)==0)THEN ` wenn Lfw keine RAM-Disk
BITMAP 20,125,icn_disk ` dann Disk-Icon anzeigen
ENDIF ` Bedingungsende
BITMAP 27,125,icn_verlassen ` Verlassen-Icon anzeigen
SETPOS 124,40 ` Cursorpos. für Disk-Namen
IF(diskflag==0)THEN ` wenn Disk vorhanden
PRINT(DISKNAME) ` Namen ausgeben
ELSE ` sonst
PRINT"(keine Diskette vorhanden)" ` Hinweistext ausgeben
ENDIF ` Bedingungsende
set_papier:set_seiten:set_format ` Opti. und Seiten eintragen
ON 1 GOTO klick ` Vektor für Mausklick setzen
ON 0 GOTO tasten ` Vektor auf Tastaturabfrage
MOUSE ON ` Mauszeiger an
MAINLOOP ` Hauptschleife aufrufen
`*** Tastatur abfragen
@tasten ` Labeleinsprungstelle
zähler=0 ` Tastenflag löschen
IF(keydata==1)THEN ` wenn F1
zähler=8 ` dann Tastenflag für Lfw A
ENDIF ` Bedingungsende
IF(keydata==3)THEN ` wenn F3
zähler=9 ` dann Tastenflag für Lfw B
ENDIF ` Bedingungsende
IF(keydata==5)THEN ` wenn F5
zähler=10 ` dann Tastenflag für Lfw C
ENDIF ` Bedingungsende
IF(keydata==14)THEN ` wenn F7
zähler=11 ` dann Tastenflag für Lfw D
ENDIF ` Bedingungsende
IF(zähler<>0)THEN ` wenn Flag für Lfw gesetzt
IF((drtype<zähler>)<>0)THEN ` und gewünschtes Lfw da
IF(((PEEK $88c4)AND %01000000)<>0)THEN ` und Treiber im RAM
PATTERN 2 ` Muster grau
RECT 40,12,287,156 ` Hauptbox löschen
DEVICE zähler ` Laufwerk setzen
GOTO main ` zum Haupteinsprung gehen
ELSE ` sonst
IF((sysflag==$80)OR((drtype<zähler>)==(PEEK $88c6)))THEN ` 2 gleiche Lfw oder C128
PATTERN 2 ` Muster grau
RECT 40,12,287,156 ` Hauptbox löschen
DEVICE zähler ` Laufwerk setzen
GOTO main ` zum Haupteinsprung gehen
ENDIF ` Bedingungsende, wechslen
ENDIF ` Bedingungsende, RAM da
ENDIF ` Bedingungsende, Lfw da
ENDIF ` Bedingungsende, Lfwwechsel
RETURN ` zurückspringen
`*** Reaktion auf Klick in der Dialogbox
@klick ` Unterroutine klick
UNTIL(mousedata==0) ` beim Loslassen zurück
klickflag=255 ` Aktion vorbelegen, 255=keine
INTERRUPT OFF ` Maus anhalten
IF((REGION 48,125,95,140)AND(diskflag==0)):klickflag=0:ENDIF ` Klick auf drucken-Icon?
IF((REGION 104,125,151,140)AND(numdrives>1)):klickflag=1:ENDIF ` Klick auf Lfw-Icon?
IF((REGION 160,125,207,140)AND(((PEEK $88c6)AND 128)==0)):klickflag=2:ENDIF ` Klick auf Disk-Icon?
IF(REGION 216,125,271,140):klickflag=3:ENDIF ` Klick auf verlassen-Icon?
IF(REGION 210,47,240,61):klickflag=4:ENDIF ` Klick auf Anfangsseite?
IF(REGION 210,64,240,78):klickflag=5:ENDIF ` Klick auf Endseite?
IF(REGION 56,91,64,99):klickflag=6:ENDIF ` Klick auf Einzelblattpapier?
IF(REGION 56,107,64,115):klickflag=7:ENDIF ` Klick auf Endlospapier?
IF(REGION 160,91,168,99):klickflag=8:ENDIF ` Klick auf Normalformat?
IF(REGION 160,107,168,115):klickflag=9:ENDIF ` Klick auf erw. Format?
INTERRUPT ON ` Maus freigeben
IF(klickflag<=3)THEN ` wenn Klick auf Icon, dann
IF(klickflag==3)THEN ` wenn Klick auf verlassen
INVERT 216,125,271,140 ` verlassen invertieren
WAIT selection ` warten, GEOS-Vorgabezeit
INVERT 216,125,271,140 ` verlassen zurückinvertieren
ELSE ` sonst (anderes Icon)
INVERT(48+((INT klickflag)*56)),125,(95+((INT klickflag)*56)),140 ` Icon invertieren
WAIT selection ` warten, GEOS-Vorgabezeit
INVERT(48+((INT klickflag)*56)),125,(95+((INT klickflag)*56)),140 ` Icon zurückinvertieren
ENDIF ` Bedingungsende
PATTERN 2 ` Muster grau
RECT 40,12,287,156 ` Dialogbox löschen
IF(klickflag==3)THEN ` wenn Klick auf verlassen
PRINTDONE ` Druck abschließen
END ` zum DeskTop verlassen
ENDIF ` Bedingungsende
IF(klickflag==2)THEN ` wenn Klick auf Disk
DISK ` Disk-Dialogbox, anmelden
ENDIF ` Bedingungsende
IF(klickflag==1)THEN ` wenn Klick auf Lf-werk
DRIVE ` Lfwerk tauschen (A-B-C-D)
ENDIF ` Bedingungsende
IF(klickflag==0)GOSUB drucken ` bei drucken, Unterroutine
GOTO main ` zurück zur Haupt-DB
ENDIF ` Bedingungsende
IF(klickflag==4)THEN ` wenn Anfangseingabe-Klick
SETPOS 217,56 ` Cursor positionieren
string=(STR s_anfang) ` Zahl in String umwandeln
INPUT string ` Editieren der Zahl
wert=(BYTE(REAL string)) ` String in Zahl umwandeln
IF((wert>0)AND(wert<=s_ende))THEN ` wenn möglicher Bereich
s_anfang=wert ` dann, Anfangsseite setzen
ENDIF ` Bedingungsende, Bereich
set_seiten ` Bereich ordentlich anzeigen
ENDIF ` Bedingungsende, Anfangse.
IF(klickflag==5)THEN ` wenn Endeingabe-Klick
SETPOS 217,73 ` Cursor positionieren
string=(STR s_ende) ` Zahl in String umwandeln
INPUT string ` Editieren der Zahl
wert=(BYTE(REAL string)) ` String in Zahl umwandeln
IF((wert>=s_anfang)AND(wert<=seitenzahl))THEN ` wenn möglicher Bereich
s_ende=wert ` dann, Endseite setzen
ENDIF ` Bedingungsende, Bereich
set_seiten ` Bereich ordentlich anzeigen
ENDIF ` Bedingungsende, Endeingabe
IF(klickflag==6)THEN ` wenn Klick auf Einzelblatt
papier=0 ` dann, Flag setzen (=0)
set_papier ` Flag anzeigen
ENDIF ` Bedingungsende
IF(klickflag==7)THEN ` wenn Klick auf Endlospapier
papier=255 ` dann, Flag setzen (=255)
set_papier ` Flag anzeigen
ENDIF ` Bedingungsende
IF(klickflag==8)THEN ` wenn Klick auf Normalform
format=0 ` dann, Flag setzen (=0)
set_format ` Flag anzeigen
ENDIF ` Bedingungsende
IF(klickflag==9)THEN ` wenn Klick auf erweitert
format=255 ` dann, Flag setzen (=255)
set_format ` Flag anzeigen
ENDIF ` Bedingungsende
RETURN ` Klickabfrage verlassen
`*** Abbau von Standartdialogboxen
@recover ` Unterroutine recover
PATTERN 2 ` Muster grau
RECT 64,32,263,135 ` Standartbox löschen
RETURN ` zurückspringen
`*** Inhaltsverzeichnislänge bestimmen
@disk_lesen ` Unterroutine disk_lesen
OPENDISK ` Diskette öffnen
diskflag=iostat ` Fehler merken
s_anfang=0:s_ende=0 ` Standartanfang/-ende
IF(iostat==0)THEN ` ausführen, wenn kein Fehler
seitenzahl=0 ` Vorgabeseitenzahl=0
track=(PEEK $8200):sektor=(PEEK $8201) ` Starttrack/-sektor
REPEAT ` Schleife zum Einlesen
GETBLOCK track,sektor,diskpuffer ` Inhalsblock lesen
track=(PEEK $8000):sektor=(PEEK $8001) ` nächster Track/Sektor
INC seitenzahl ` seitenzahl=seitenzahl+1
UNTIL((track==0)OR(iostat<>0)) ` Schleifenende, Bedingung
IF(diskflag==0)THEN ` wenn kein Fehler
s_anfang=1:s_ende=seitenzahl ` dann richtige Grenzen setzen
ENDIF ` Bedingungsende, Grenzen
ENDIF ` Bedingungsende, Inhalt lesen
RETURN ` zurückspringen
`*** Anzeige der Seiten des Druckbereichs
@set_seiten ` Unterroutine set_seiten
PATTERN 0 ` Muster weiß
SETPOS 217,56:PRINT(STR s_anfang);:RECT xpos,48,239,60 ` Anfangsseite zeigen
SETPOS 217,73:PRINT(STR s_ende);:RECT xpos,65,239,77 ` Endseite zeigen
RETURN ` zurückspringen
`*** Setzen des Papiertyps
@set_papier ` Unterroutine set_papier
IF(papier==0)THEN ` wenn papier==0
PATTERN 2 ` dann Muster für 1. grau
ELSE ` sonst
PATTERN 0 ` Muster für 1. weiß
ENDIF ` Bedingungsende
RECT 57,92,63,98 ` Rechteck zeichnen
IF(papier<>0)THEN ` wenn papier nicht 0
PATTERN 2 ` dann Muster für 2. grau
ELSE ` sonst
PATTERN 0 ` Muster für 2. weiß
ENDIF ` Bedingungsende
RECT 57,108,63,114 ` Rechteck zeichnen
RETURN ` zurückspringen
`*** Setzen des Formats
@set_format ` Unterroutine set_format
IF(format==0)THEN ` wenn format==0
PATTERN 2 ` dann Muster für 1. grau
ELSE ` sonst
PATTERN 0 ` Muster für 1. weiß
ENDIF ` Bedingungsende
RECT 161,92,167,98 ` Rechteck zeichnen
IF(format<>0)THEN ` wenn format nicht 0
PATTERN 2 ` dann Muster für 2. grau
ELSE ` sonst
PATTERN 0 ` Muster für 2. weiß
ENDIF ` Bedingungsende
RECT 161,108,167,114 ` Rechteck zeichnen
RETURN ` zurückspringen
`*** Routine zum Test der Druckeranforderungen
@drucken ` Einsprunglabel
länge=(DIMY) ` Papierlänge bestimmen
reihen=((länge-3)/6) ` Iconreihen pro Seite ?
IF((länge<9)OR((DIMX)<>80))THEN ` Breite/Länge OK?
STRNBOX"/BProgramm für diesen","Drucker nicht geeignet.","" ` wenn nicht, Infobox
ELSE ` sonst
GOSUB drucken2 ` Druckroutine aufrufen
ENDIF ` Unterroutine drucken
RETURN ` Bedingungsende
` zurückspringen
`*** Ausgabe des Inhaltsverzeichnisses
@drucken2 ` Einsprunglabel
PATTERN 0 ` Muster weiß
RECT 90,80,230,120 ` Druckenbox ausgeben
FRAME 90,80,230,120 ` Druckenbox einrahmen
FRAME 90,80,231,121 ` 3D einrahmen
SETPOS 95,105 ` Cursor positionieren
PRINT"Abbruch mit der STOP-Taste" ` Abbruch-Text ausgeben
SETPOS 95,115 ` Cursor positionieren
PRINT"oder durch Mausklick!" ` Abbruch-Text ausgeben
abbruch=0 ` Abbruchflag setzen
POKE $39,0 ` letzen Mausklick löschen
p_seite=1 ` Seitenzähler auf 1 setzen
druckseiten=((s_ende-s_anfang)+1) ` Zähler für Gesamtreihen
p_seiten=((druckseiten/reihen)+1) ` Seitenanzahl bestimmen
track=0 ` track als Schleifenzähler
REPEAT ` Schleife
(datum2<track>)=(date<track>) ` Datum kopieren
INC track ` Zähler erhöhen
UNTIL(track==5) ` bis alles kopiert ist
GOSUB neue_seite ` Unterroutine für neue Seite
reihenzahl=reihen ` Zähler für Reihen/Seite
OPENDISK ` Diskette öffnen (BAM lesen)
track=(PEEK $8200):sektor=(PEEK $8201) ` Track/Sektor 1. Directorybl.
zähler=s_anfang ` Zähler Blöcke überspringen
WHILE(zähler<>1)DO ` Schleife bis alle überspr.
GETBLOCK track,sektor,diskpuffer ` Directoryblock einlesen
track=(diskpuffer<0>):sektor=(diskpuffer<1>) ` Track/Sektor des nächsten
DEC zähler ` Schleifenende
LOOP ` Track/Sektor 1. Druckblock
REPEAT ` Schleife Reihenausgabe
GETBLOCK track,sektor,diskpuffer ` Directoryblock einlesen
track=(PEEK $8000):sektor=(PEEK $8001) ` Verkettung merken
reihe_drucken ` Unterroutine Reihe ausgeben
DEC druckseiten ` Seitenzähler erniedrigen
DEC reihenzahl ` Reihenzähler erniedrigen
IF(reihenzahl==0)THEN ` wenn Seitenende
STOPPRINT ` Papier auswerfen
IF(papier==0)THEN ` wenn Einzelblattpapier
STRNBOX"/BBitte neue Seite einlegen,","um fortzusetzen.","" ` Aufforderungsbox
ENDIF ` Bedingungsende
GOSUB neue_seite ` Unterroutine neue Seite
reihenzahl=reihen ` Reihen pro Seite neu setzen
ENDIF ` Bedingungsende
GET zähler ` Tastaturcode einlesen
IF((zähler==22)OR(((PEEK $39) AND %00100000)<>0))THEN ` wenn STOP oder Mausklick
abbruch=255 ` Abbruchflag setzen
ENDIF ` Bedingungsende
UNTIL((druckseiten==0)OR(abbruch<>0)) ` bis alle Reihen ausgegeben
IF(abbruch==0)THEN ` wenn Abbruch, kein Durck
scrbuf=$40 ` nur in den Hintergrund
PATTERN 0 ` Muster weiß
RECT 0,0,319,96 ` Druckbereich löschen
FRAME 24,10,319,28:FRAME 0,58,295,76 ` Rahmen Kapazitätsausgabe
RECT 319,11,319,27:RECT 0,59,0,75 ` Trennlinie löschen
SETPOS 31,22:PRINT"/PDiskettenkapazität: /B"; ` Kapazität ausgeben
PRINT(STR(((CAPACITY 0)+1)/4)); ` Wert ausgeben
PRINT" KByte" ` KByte ausgeben
SETPOS 0,70:PRINT"/Pdavon belegt: /B"; ` belegt ausgeben
PRINT(STR(((CAPACITY 2)+1)/4)); ` Wert ausgeben
PRINT" KByte" ` KByte ausgeben
SETPOS 175,70:PRINT"/Pnoch frei: /B"; ` frei ausgeben
PRINT(STR(((CAPACITY 1)+1)/4)); ` Wert ausgeben
PRINT" KByte" ` KByte ausgeben
HARDCOPY 25,31,6,puffer ` Grafik an Drucker senden
scrbuf=$80 ` in Vordergrund schreiben
ENDIF ` Bedingungsende, drucken
PATTERN 2 ` Muster grau
RECT 90,80,231,121 ` Druckbox löschen
STOPPRINT ` Seite auswerfen
RETURN ` zurückspringen
`*** neue Seite beginnen
@neue_seite ` Einsprunglabel
PATTERN 0 ` Muster weiß
RECT 91,81,229,95 ` Seitebereich löschen
SETPOS 95,91 ` Cursor positionieren
PRINT"/BDrucke Seite "; ` Text ausgeben
PRINT(STR p_seite); ` Seitennummer ausgeben
PRINT"... /P" ` Text ausgeben
STARTPRINT ` neue Grafikseite beginnen
scrbuf=$40 ` nur in den Hintergrund
RECT 0,0,319,96 ` Druckbereich löschen
FRAME 24,0,319,18:FRAME 0,48,295,66 ` Rahmen zeichnen
RECT 319,1,319,17:RECT 0,49,0,65 ` Trennlinie entfernen
SETPOS 31,12:PRINT"Inhaltsverzeichnis der Diskette: /B"; ` Text eintragen
PRINT(DISKNAME) ` Diskettenamen ausgeben
SETPOS 0,60:PRINT"/Pgedruckt am: /B"; ` gedruckt ausgeben
PRINT((STR(datum2<2>))+"."); ` Tag ausgeben
PRINT((STR(datum2<1>))+"."); ` Monat ausgeben
PRINT((STR(datum2<0>))+" "); ` Jahr ausgeben
PRINT((STR(datum2<3>))+":"); ` Stunde ausgeben
PRINT(RIGHT("0"+(STR(datum2<4>))),2) ` Minuten 2-stellig ausgeben
seitentext=(("Seite "+(STR p_seite))+" von ") ` Seiten-Zeichenkette
seitentext=(seitentext+(STR p_seiten)) ` Zeichenkette erweitern
style=0 ` Stil auf PLAINTEXT
SETPOS(288-(PLEN seitentext)),60 ` rechtsbündig positionieren
PRINT seitentext ` Text ausgeben
HARDCOPY 25,31,4,puffer ` Grafik an Drucker senden
scrbuf=$80 ` Ausgabe auf Vordergrund
INC p_seite ` Seitennummer erhöhen
RETURN ` zurückspringen
`*** Routine zur Ausgabe einer Iconreihe
@reihe_drucken ` Einsprunglabel
reihe_zeigen ` Unterroutine Reihe aufbauen
HARDCOPY 25,31,6,puffer ` Grafik an Drucker senden
RETURN ` zurückspringen
`*** Iconreihe in den Hintergrund schreiben
@reihe_zeigen ` Einsprunglabel
scrbuf=$40 ` Ausgabe auf Hintergrund
style=0 ` Textstil PLAINTEXT
offset=2 ` Startbyte im Directory-Block
PATTERN 0 ` Muster 0 (weiß)
RECT 0,0,319,96 ` Druckpuffer löschen
icon=0 ` Zähler für Icon-Reihe setzen
REPEAT ` Schleife beginnen
IF(icon>3)THEN ` wenn rechter Teil
icony=48:iconx=((INT(icon-4))*72) ` dann unterer Bildschirmteil
ELSE ` sonst
icony=0:iconx=(32+((INT icon)*72)) ` oberer Bildschirmteil
ENDIF ` Bedingungsende
WINDOW(iconx+1),(icony+1),(iconx+70),(icony+46) ` Textausgabebegrenzung
icon_zeigen ` ein Icon in Druckpuffer
WINDOW ` Textbegrenzung aufheben
INC icon ` Iconzähler erhöhen
offset=(offset+32) ` nächster Directoryeintrag
UNTIL(icon==8) ` bis alle 8 Icons ausgegeben
icon=((s_ende-druckseiten)+1) ` Directoryseite ermittel
SETPOS(28-(PLEN(STR icon))),20 ` rechtsbündig positionieren
PRINT(STR icon) ` Nummer ausgeben
scrbuf=$80 ` Ausgabe auf Vordergrund
RETURN ` zurückspringen
`*** einzelnes Icon im Druckpuffer darstellen
@icon_zeigen ` Einsprunglabel
IF(format==0)THEN ` wenn einfache Ausgabeform
zeichen=((diskpuffer<offset>)AND %00111111) ` dann C= Dateityp bestimmen
IF(zeichen<>0)THEN ` Ausgabe, wenn nicht DEL
IF((zeichen>3)OR((diskpuffer<(offset+22)>)==0))THEN ` wenn Datei nicht-GEOS
BITMAP(LOW((iconx/8)+3)),(icony+5),c64_icon ` dann Standart-Icon
ELSE ` sonst
GETBLOCK(diskpuffer<(offset+19)>),(diskpuffer<(offset+20)>),diskpuffer2 ` Infoblock einlesen
(diskpuffer2<1>)=3 ` zu Bitmapobjekt
(diskpuffer2<2>)=21 ` verwandeln
(diskpuffer2<3>)=0 ` y-Koordinate als Word
BITMAP(LOW((iconx/8)+3)),(icony+5),(OBJECT AT $8101) ` Icon ausgeben
ENDIF ` Bedingungsende
FONT university6 ` Zeichensatz einstellen
seitentext="" ` Zeichenkette löschen
zzähler=3 ` Zeichenzähler für Dateiname
REPEAT ` Schleife Name einlesen
zeichen=(diskpuffer<(offset+zzähler)>) ` Zeichen holen
IF(zeichen<>$a0)THEN ` wenn nicht $a0
ADD seitentext,zeichen ` dem Namen hinzufügen
ENDIF ` Bedingungsende
INC zzähler ` Zähler erhöhen
UNTIL((zeichen==$a0)OR(zzähler==19)) ` bis Endzeichen oder Ende
SETPOS(iconx+(36-((PLEN seitentext)/2))),(icony+33) ` Ausgabeposition zentriert
PRINT seitentext ` Dateiname ausgeben
SYSFONT ` wieder Systemzeichensatz
ENDIF ` Bedingungsende
ELSE ` sonst (erweiterte Form)
zeichen=((diskpuffer<offset>)AND %00111111) ` C= Dateitypbestimmen
IF(zeichen<>0)THEN ` wenn nicht DEL
FRAME iconx,icony,(iconx+70),(icony+46) ` Rahmen für Icon ziehen
WINDOW(iconx+1),(icony+1),(iconx+69),(icony+45) ` eingeschränktes Textfenster
IF((zeichen>3)OR((diskpuffer<(offset+22)>)==0))THEN ` wenn Datei nicht-GEOS
BITMAP(LOW((iconx/8)+1)),(icony+3),c64_icon ` Standart-Icon ausgeben
ELSE ` sonst
GETBLOCK(diskpuffer<(offset+19)>),(diskpuffer<(offset+20)>),diskpuffer2 ` Infoblock einlesen
(diskpuffer2<1>)=3 ` in Bitmap-Objekt
(diskpuffer2<2>)=21 ` umwandeln
(diskpuffer2<3>)=0 ` Y-Koordniate als Word
BITMAP(LOW((iconx/8)+1)),(icony+3),(OBJECT AT $8101) ` Icon ausgeben
ENDIF ` Bedingungsende